package com.lipaluma.parser.builder;

import java.util.List;

import com.lipaluma.config.Configuration;
import com.lipaluma.field.mapper.FieldMapper;
import com.lipaluma.field.merge.MergingTargetFunction;
import com.lipaluma.parser.AbstractDataParser;
import com.lipaluma.parser.DataParser;
import com.lipaluma.parser.FromParserFieldMapperBuilder;

public interface FromParserMapFieldOnlyBuilder<BUILDER extends AbstractDataParser.Builder<? extends DataParser<TARGET>, TARGET, ? extends Configuration>, TARGET> {
	FromParserMapFieldOnlyBuilder<BUILDER, TARGET> mapNextFieldInOneToMany();
	FromParserFieldMapperBuilder<BUILDER, TARGET> addFieldMapper(String fieldName, FieldMapper mapper);
	FromParserNeedMappingBuilder<BUILDER, TARGET> mapFieldAutomatically(String fieldName);
	FromParserNeedMappingBuilder<BUILDER, TARGET> mapMultipleFieldAutomatically(String fieldName);
	FromParserMapObjectBuilder<BUILDER, TARGET> mapObject(String fieldName, Class<?> targetClass);
	FromParserFieldMapperBuilder<BUILDER, TARGET> mapObject(String fieldName, List<FieldMapper> fieldMappers);
	FromParserFieldMapperBuilder<BUILDER, TARGET> mapObject(String fieldName, List<FieldMapper> fieldMappers, boolean targetMergeable);
	FromParserFieldMapperBuilder<BUILDER, TARGET> mapObject(String fieldName, List<FieldMapper> fieldMappers, MergingTargetFunction mergingTargetFunction);
}
